﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Comun;

namespace DalcProFacu
{
    public class Usuario
    {
        Conexion conn = null;

        public Usuario(Conexion con)
        {
            conn = con;
        }

        public DataSet VerificarLogeo(string sUsuario,string sContraseña)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT PERFIL FROM SAHC_USUARIO ");
            sSql.Append(string.Format(" WHERE NOMUSU = '{0}' AND CLAVE = '{1}' ", sUsuario,sContraseña));

            Ds = conn.EjecutarQuery(sSql.ToString(), "LOGIN");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public DataSet HabilitarMenus(string sPerfil)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT IDFUNCION, DESCRIPCION FROM SAHC_FUNCION ");
            sSql.Append(" INNER JOIN SAHC_PERFILFUNCION ON IDFUNCION = SAHC_FUNCION.IDFUNCION ");
            sSql.Append(string.Format(" WHERE SAHC_PERFILFUNCION.IDPERFIL = {0} ", sPerfil));

            Ds = conn.EjecutarQuery(sSql.ToString(), "MENU");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public DataSet GetPerfiles()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT * FROM SAHC_PERFIL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "PERFIL");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public int AltaUsuario(string sUsuario, string sPass, int sPerfil, string sNombre)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(" SELECT MAX(IDUSUARIO) + 1 FROM SAHC_USUARIO ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "IDUSUARIO");

            sSql.Append(" INSERT INTO SAHC_USUARIO VALUES ( ");
            sSql.Append(string.Format(" {0},'{1}', '{2}', {3}, '{4}')", Ds.Tables["IDUSUARIO"].Rows.ToString(), sUsuario, sPass, sPerfil, sNombre, DateTime.Today.ToShortDateString()));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public DataSet GetUsuario(string sUsuario)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT U.NOMUSU, P.DESCRIPCION AS PERFIL, U.NOMBREUSUARIO, U.CLAVE ");
            sSql.Append(" FROM SAHC_USUARIO U ");
            sSql.Append(" INNER JOIN SAHC_PERFIL P ON P.IDPERFIL = U.IDPERFIL ");
            sSql.Append(string.Format(" WHERE NOMUSU = '{0}' ", sUsuario));

            Ds = conn.EjecutarQuery(sSql.ToString(), "USUARIO");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public int BajaUsuario(string sUsuario)
        {
            StringBuilder sSql = new StringBuilder();

            int fila;

            sSql.Append(string.Format("DELETE FROM SAHC_USUARIO WHERE NOMUSU = '{0}'", sUsuario));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public DataSet GetUsuarios()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT U.NOMUSU, P.DESCRIPCION AS PERFIL, U.NOMBREUSUARIO ");
            sSql.Append(" FROM SAHC_USUARIO U ");
            sSql.Append(" INNER JOIN SAHC_PERFIL P ON P.IDPERFIL = U.IDPERFIL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "USUARIOS");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public int ModificacionUsuario(string sUsuario, string sPass, int sPerfil, string sNombre)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(" UPDATE SAHC_USUARIO SET ");
            sSql.Append(string.Format(" CLAVE = '{0}',", sPass));
            sSql.Append(string.Format(" IDPERFIL = {0}, ", sPerfil));
            sSql.Append(string.Format("NOMBREUSUARIO = '{0}' ", sNombre));
            sSql.Append(string.Format(" WHERE NOMUSU = '{0}' ", sUsuario));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public int AltaPersonal(string sIdPersonal, string sNombre, string sApellido,
           string sTipoDoc, string sDocumento, string sSexo, string sDateTime, string sEstadoCivil, string sMail,
           string sCalle, string sNum, string sDto, string sPiso, string sCodPod, string sLocalidad, string sProv,
           string sTelef, string sCel)
        { 
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila;

            sSql.Append(" INSERT INTO SAHC_PERSONAL VALUES( ");
            sSql.Append(string.Format(" {0}, NULL, '{1}', '{2}', '{3}', ", sIdPersonal, sNombre, sApellido, sSexo));
            sSql.Append(string.Format(" '{0}', '{1}', '{2}', '{3}', ",sDateTime, sEstadoCivil, sTipoDoc, sDocumento));
            sSql.Append(string.Format(" '{0}', '{1}', '{2}', '{3}', ", sTelef, sCel, sMail, sCalle));
            sSql.Append(string.Format(" '{0}', '{1}', '{2}', '{3}', ", sNum, sPiso, sDto, sCodPod));
            sSql.Append(string.Format(" '{0}', '{1}') ", sLocalidad, sProv));

            fila = conn.EjecutarQuery(sSql.ToString());

            //this.Errores = conn.Errores;
            return fila;
        }

        public string GetPersonal()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            string personal;

            sSql.Append(" SELECT MAX(idPersona) + 1 FROM SAHC_PERSONAL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "PERSONAL");

            personal = Ds.Tables["PERSONAL"].Rows[0][0].ToString();

            //this.Errores = conn.Errores;

            return personal;
        }

        public int AltaProfesional(string idPersona, string sMatricula, string sEspecialidad)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();

            int fila = 0;

            sSql.Append(" SELECT MAX(idProfesional) + 1 FROM SAHC_PROFESIONAL ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONAL");

            if (Ds.Tables["PROFESIONAL"].Rows.Count > 0)
            {

                string idProfesional = Ds.Tables["PROFESIONAL"].Rows[0][0].ToString();

                //idProfesional, idPersonal, nroMatricula, idEspecialidad

                sSql.Remove(0, sSql.Length);

                sSql.Append(" INSERT INTO SAHC_PROFESIONAL VALUES ( ");
                sSql.Append(string.Format(" {0}, {1}, '{2}', {3}) ", idProfesional, idPersona, sMatricula, sEspecialidad));

                fila = conn.EjecutarQuery(sSql.ToString());
            }

            //this.Errores = conn.Errores;
            return fila;
        }

        public DataSet GetProfesionales()
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT P.* , PR.nombre, PR.apellido, E.descripcion FROM ");
            sSql.Append(" SAHC_PROFESIONAL P, SAHC_PERSONAL PR, SAHC_ESPECIALIDAD E ");
            sSql.Append(" WHERE P.idPersonal = PR.idPersona ");
            sSql.Append(" AND P.idEspecialidad = E.idEspecialidad ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONALES");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public DataSet GetProfesionales(string sBusqueda)
        {
            StringBuilder sSql = new StringBuilder();

            DataSet Ds = new DataSet();

            sSql.Append(" SELECT P.* , PR.nombre, PR.apellido, E.descripcion FROM ");
            sSql.Append(" SAHC_PROFESIONAL P, SAHC_PERSONAL PR, SAHC_ESPECIALIDAD E ");
            sSql.Append(" WHERE P.idPersonal = PR.idPersona ");
            sSql.Append(" AND P.idEspecialidad = E.idEspecialidad ");

            Ds = conn.EjecutarQuery(sSql.ToString(), "PROFESIONALES");

            //this.Errores = conn.Errores;
            return Ds;
        }

        public int ModificacionProfesional(string idProfesional, string sNombre, string sApellido,
        string sTipoDoc, string sDocumento, string sSexo, string sDateTime, string sEstadoCivil, string sMail,
        string sCalle, string sNum, string sDto, string sPiso, string sCodPod, string sLocalidad, string sProv,
        string sTelef, string sCel, string sMatricula, string sEspecialidad)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();
            int fila = 0;

            sSql.Append(" SELECT idPersona FROM SAHC_PERSONAL PR ");
            sSql.Append(" INNER JOIN SAHC_PROFESIONAL PROF ON PROF.idPersonal = PR.idPersona ");
            sSql.Append(string.Format(" WHERE PROF.idProfesional = {0} ", idProfesional.Trim()));

            Ds = conn.EjecutarQuery(sSql.ToString(), "IDPPERSONAL");

            if(Ds.Tables["IDPPERSONAL"].Rows.Count > 0)
            {
                string aux = Ds.Tables["IDPPERSONAL"].Rows[0]["idPersona"].ToString();

                sSql.Remove(0, sSql.Length);

                sSql.Append(" UPDATE SAHC_PERSONAL SET ");

                 sSql.Append(string.Format(" nombre = '{0}' ", sNombre));
                 sSql.Append(string.Format(" ,apellido = '{0}' ", sApellido));
                 sSql.Append(string.Format(" ,sexo = '{0}' ", sSexo));
                 sSql.Append(string.Format(" ,fecNac = '{0}' ", sDateTime));
                 sSql.Append(string.Format(" ,estadoCivil = '{0}' ", sEstadoCivil));
                 sSql.Append(string.Format(" ,tipoDoc = '{0}' ", sTipoDoc));
                 sSql.Append(string.Format(" ,nroDoc = '{0}' ", sDocumento));
                 sSql.Append(string.Format(" ,telefono = '{0}' ", sTelef));
                 sSql.Append(string.Format(" ,celular = '{0}' ", sCel));
                 sSql.Append(string.Format(" ,email = '{0}' ",  sMail));
                 sSql.Append(string.Format(" ,calle = '{0}' ", sCalle));
                 sSql.Append(string.Format(" ,nroCalle = '{0}' ", sNum));
                 sSql.Append(string.Format(" ,piso = '{0}' ", sPiso));
                 sSql.Append(string.Format(" ,departamento = '{0}' ", sDto)); 
                 sSql.Append(string.Format(" ,codPostal = '{0}' ", sCodPod));
                 sSql.Append(string.Format(" ,localidad = '{0}' ", sLocalidad));
                 sSql.Append(string.Format(" ,provincia = '{0}' ", sProv));
                 sSql.Append(string.Format(" WHERE idPersona = {0} ", aux.Trim()));

                 fila = conn.EjecutarQuery(sSql.ToString());

                if(fila > 0)
                {
                    fila = 0;

                    sSql.Remove(0, sSql.Length);

                    sSql.Append(" UPDATE SAHC_PROFESIONAL SET ");
                    sSql.Append(string.Format(" nroMatricula = '{0}' ", sMatricula));
                    sSql.Append(string.Format(" ,idEspecialidad = {0} ", sEspecialidad));
                    sSql.Append(string.Format(" WHERE idProfesional = {0} AND idPersonal = {1} ", idProfesional.Trim(), aux.Trim()));

                    fila = conn.EjecutarQuery(sSql.ToString());
                }
            }

            //this.Errores = conn.Errores;
            return fila;
        }

        public int EliminarProfesional(string sUsuario)
        {
            StringBuilder sSql = new StringBuilder();
            DataSet Ds = new DataSet();
            int fila = 0;

            sSql.Append(string.Format(" SELECT idPersonal FROM SAHC_PROFESIONAL WHERE idProfesional =  {0} ", sUsuario));

            Ds = conn.EjecutarQuery(sSql.ToString(), "IDPPERSONAL");

            if (Ds.Tables["IDPPERSONAL"].Rows.Count > 0)
            {
                string aux = Ds.Tables["IDPPERSONAL"].Rows[0]["idPersonal"].ToString();

                sSql.Remove(0, sSql.Length);

                sSql.Append(string.Format(" DELETE FROM SAHC_PERSONAL WHERE idPersona = {0} ", aux));

                fila = conn.EjecutarQuery(sSql.ToString());

                if (fila > 0)
                {
                    fila = 0;

                    sSql.Remove(0, sSql.Length);

                    sSql.Append(string.Format(" DELETE FROM SAHC_PROFESIONAL WHERE idProfesional = {0} ", sUsuario));

                    fila = conn.EjecutarQuery(sSql.ToString());
                }
            }

            //this.Errores = conn.Errores;
            return fila;
        }
    }
}
